package Practice.dao.service;

import Practice.dao.impl.UserDaoImpl;
import Practice.dao.model.Users;
import Practice.dao.UserDao;
import java.util.*;

/**
 * @author hyhWTX
 * @version 1.0
 * @ClassName UseServiceImpl
 * @date 2022年08月12日 20:00
 * @Description: TODO (一句话描述以下该类的功能)
 */
public class UseServiceImpl implements UserService {
    //创建一个Random对象
    Random random = new Random();
    //创建UserDao对象
    UserDao userDao = new UserDaoImpl();

    @Override
    public void addUser() {
        List<Users> users = new ArrayList<>();
        //生成1000个随机昵称，要求不能重复，由三个小写字母组成
        Set<String> nickNameSet = NickName();
        for (String nickName : nickNameSet) {
            //创建User对象
            Users user = new Users();
            //设置昵称
            user.setUser_nick_name(nickName);
            //生成一个随机的积分(0-200)
            int score = getScore();
            user.setUser_score(score);
            //设置性别
            user.setUser_sex(score % 2 == 0 ? "女" : "男");

            //获得注册时间
            Date time = getTime();
            user.setUser_register_date(time);

            //将user对象添加到LIst集合中
            users.add(user);
        }

        userDao.addUser(users);
    }

    @Override
    public void delUser(Integer... ids) {
        userDao.delUser(ids);
    }

    @Override
    public void upDateById(int userId, int score) {
        userDao.updateById(userId, score);

    }

    @Override
    public List<Users> queryMonth(int month) {
        return userDao.queryMonth(month);
    }

    @Override
    public Users queryId(int userId) {
        return userDao.queryId(userId);

    }

    @Override
    public List<Users> queryUserScore(int score) {
        return userDao.queryUserScore(score);
    }

    @Override
    public List<Users> queryUserName(String userName) {
        return userDao.queryUserName(userName);
    }

    /**
     * 获得随机积分的方法
     *
     * @return
     */
    private int getScore() {

        //生成一个大于等于0小于随机种子(201)的随机数
        int num = random.nextInt(201);
        return num;
    }

    /**
     * 生成1000个随机昵称，要求不能重复，由三个小写字母组成
     */
    public Set<String> NickName() {
        Set<String> nickNameSet = new HashSet<>();
        while (nickNameSet.size() < 1000) {
            String username = "";
            for (int i = 0; i < 3; i++) {
                int num = random.nextInt(26);
                username = username + (char) (num + 97);
            }
            //将生成的nickName存到nickNameSet集合中
            nickNameSet.add(username);
        }
        return nickNameSet;
    }

    /**
     * 获得注册时间
     *
     * @return
     */

    public Date getTime() {
//    获得当前时间
        Calendar time = Calendar.getInstance();
//    设置年份
        int year = 2019;
//    设置月份
        int month = random.nextInt(12);
//    设置日期
        int dayCount = getYearMonth(year, month + 1);
//    设置时间
        time.set(year, month, dayCount);
//将Calendar转化为Date对象
        Date date = time.getTime();
        return date;

    }

    /**
     * 根据年月获得该年中指定月份的总天数
     *
     * @param year
     * @param month
     * @return
     */
    public int getYearMonth(int year, int month) {
        int day = 0;
        switch (month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                day = 31;
                break;
            case 4:
            case 9:
            case 11:
                day = 30;
                break;
            case 2:
//                判断年份是否为闰年
                if (year%4==0&&year%100==0&&year%400==0){
                    day = 29;
                }else {
                    day = 28;
                }
                break;
        }
        return day;
    }

}
